package com.arpa.wms.service;

import com.arpa.core.web.Result;
import com.arpa.wms.domain.dto.InventoryRecordDTO;
import com.arpa.wms.domain.entity.Inventory;
import com.arpa.wms.domain.entity.InventoryRecord;
import com.arpa.wms.domain.vo.InventoryRecordVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author: Allen chen
 * @Date 2020/8/25
 * @Description:
 */
public interface IInventoryRecordService extends IService<InventoryRecord> {

    /**
     * 查询列表
     * @param inventoryRecordDTO
     * @return
     */
    List<InventoryRecordVO> queryList(InventoryRecordDTO inventoryRecordDTO);

    /**
     * 查询合计,包含总数
     * @param containerDTO
     * @return
     */
    InventoryRecordVO queryListSum(InventoryRecordDTO containerDTO);

    /**
     * 插入库存记录信息
     * @param inventory 库存信息
     * @param sourceNo  来源单号，如入库单号、移位单号、差异单号
     * @param num   操作数量，正负表示增加或减少
     * @param type  操作类型，如收货、入库、拣货、出库、移位, 在InventoryRecordTypeEnum对象中
     * @return
     */
    Result insertRecord(Inventory inventory, String sourceNo, BigDecimal num, String type);
    /**
     * 异步插入库存记录信息
     * @param inventory 库存信息
     * @param sourceNo  来源单号，如入库单号、移位单号、差异单号
     * @param num   操作数量，正负表示增加或减少
     * @param type  操作类型，如收货、入库、拣货、出库、移位, 在InventoryRecordTypeEnum对象中
     * @return
     */
    void asynInsertRecord(Inventory inventory, String sourceNo, BigDecimal num, String type);

    /**
     * 生成库存日志记录
     * @param inv
     * @param sourceNo
     * @param num
     * @param type
     * @return
     */
    InventoryRecord makeRecord(Inventory inv, String sourceNo, BigDecimal num, String type);

    /**
     * 插入库存记录信息， 与同名的insertRecord作用一样，用于没有库存对象，只有库存编码的情况
     * @param invCode 库存编码
     * @param sourceNo  来源单号，如入库单号、移位单号、差异单号
     * @param num   操作数量，正负表示增加或减少
     * @param type  操作类型，如收货、入库、拣货、出库、移位, 在InventoryRecordTypeEnum对象中
     * @return
     */
    Result insertRecord(String invCode, String sourceNo, BigDecimal num, String type);

    /**
     * 执行sql
     * @param sql
     */
    void execSql(String sql);
}
